package beans;

import java.util.*;
import java.sql.*;
import dbUtil.*;
import utils.*;
import iteradores.IteradorRol;

/**
 * Clase que representa el bean de la tabla Rol de la BD
 * @author José Giménez, Gustavo Planás, Esteban Benítez
 */
public class Rol extends PgAbm implements Abm {
    ResultSet rs_rol;
    private Hashtable th_rol = new Hashtable();
    /**
     * Constructor de la clase Permiso
     */
    public Rol() 
    {
        // Seteamos el nombre de la tabla a consultar
        super.setTableName("rol");
        
        // Se establecen los campos de la tabla
        ArrayList array_campos = new ArrayList();
        array_campos.add("idrol"); 
        array_campos.add("descripcion");    
        array_campos.add("usuario_ing");
        array_campos.add("fecha_ing");
        
        // Se establece la clave
        ArrayList array_claves = new ArrayList(); 
        array_claves.add("idrol");
        
        // Inicializamos el hash que contendra los valores de la tabla
        super.initMapping();
        
        // Se establecen estos valores en el padre
        super.setCampos(array_campos);
        super.setClaves(array_claves); 
        
        //Setea qué secuenciador utiliza la tabla
        super.setSequence("idrol", "idrol_idrol_seq");
    }
    
    /**
     * Obtiene el ID del rol
     * @return ID del rol
     */
    public String getIdRol() {
         return (String) getMapValue("idrol");
    }

    /**
     * Setea el ID del rol
     * @param valor Nuevo ID del rol
     */
    public void setIdRol(String idrol) {
        setMapValue("idrol", idrol); 
    }

    /**
     * Obtiene la descripción del rol
     * @return Descripción del rol
     */
    public String getDescripcion() {
        return (String) getMapValue("descripcion");
    }

    /**
     * Setea la descripción del rol
     * @param valor Nueva descripción del rol
     */
    public void setDescripcion(String descripcion) {
        setMapValue("descripcion", descripcion); 
    }

    /**
     * Obtiene el usuario ingresante
     * @return Usuario ingresante
     */
    public String getUsuario_ing() {
        return (String) getMapValue("usuario_ing");
    }

    /**
     * Setea el usuario ingresante
     * @param valor Nuevo usuario ingresante
     */
    public void setUsuario_ing(String usuario_ing) {
        setMapValue("usuario_ing", usuario_ing); 
    }

    /**
     * Obtiene la fecha de ingreso
     * @return Fecha de ingreso
     */
    public String getFecha_ing() {
        return (String) getMapValue("fecha_ing");
    }

    /**
     * Setea la fecha de ingreso
     * @param valor Nueva fecha de ingreso
     */
    public void setFecha_ing(String fecha_ing) {
        setMapValue("fecha_ing", fecha_ing); 
    }
    
    /**
     * Obtiene el iterador de la clase Rol
     * @return Iterador de la clase Rol
     * @throws java.lang.Exception
     */
    public Iterador getIterator() throws Exception
    {
        ResultSet rs_datos = super.getResultSet();
        IteradorRol iter = new IteradorRol(rs_datos);    
        return iter; 
    }
    
    public int getRoles() throws Exception{
        String sql_query = "";
        int cant_filas;
        Hashtable th_aux = new Hashtable();
        
        sql_query = "select * from rol order by 2; ";
        
        sql_query += getLimitOffset();
        
        Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                                            ResultSet.CONCUR_READ_ONLY);
              
        // Se ejecuta la consulta y se recupera el ResultSet        
        System.out.println("SQL: "+ sql_query);
        rs_rol = stm.executeQuery(sql_query);                   
        
        cant_filas = 0;        
        if (rs_rol.last()) 
        {          
            cant_filas = rs_rol.getRow();
            rs_rol.beforeFirst();        
        }
        
        if (rs_rol != null){
            while (rs_rol.next()){
                 th_aux.put(rs_rol.getString(1), rs_rol.getString(2));
            }
            th_rol = th_aux;
        }
        
        System.out.println("Cantidad Filas: " + cant_filas);
        return cant_filas;
    }
    
    public String getRolByID(String ID) throws Exception{
        String result = "";
        
        if (!th_rol.isEmpty()){
            result = (String)th_rol.get(ID);
        }
        return result;
    }
    
    public Iterador getIteratorAll() throws Exception
    {
        IteradorRol iter = new IteradorRol(rs_rol);    
        return iter; 
    }
}
